typedef struct _LV_COLUMN {
UINT mask; //屏蔽位的组合(见下面括号),表明哪些成员是有效的.
int fmt; /*该列的表头和子项的标题显示格式(LVCF_FMT).可以是LVCFMT_CENTER、LVCFMT_LEFT或LVCFMT_RIGHT*/
int cx; //以像素为单位的列的宽度(LVCF_FMT)
LPTSTR pszText; //指向存放列表头标题正文的缓冲区(LVCF_TEXT)
int cchTextMax; //标题正文缓冲区的长度(LVCF_TEXT)
int iSubItem; //说明该列的索引(LVCF_SUBITEM)
} LV_COLUMN;
LV_ITEM结构.该结构用来描述一个表项或子项,它包含了项的各种属性,其定义为
typedef struct _LV_ITEM {
UINT mask; //屏蔽位的组合(见下面括号),表明哪些成员是有效的
int iItem; //从0开始编号的表项索引(行索引)
int iSubItem; /*从1开始编号的子项索引(列索引),若值为0则说明该成员无效,结构描述的是一个表项而不是子项*/
UINT state; //项的状态(LVIF_STATE)
UINT stateMask; //项的状态屏蔽
LPTSTR pszText; //指向存放项的正文的缓冲区(LVIF_TEXT)
int cchTextMax; //正文缓冲区的长度(LVIF_TEXT)
int iImage; //图标的索引(LVIF_IMAGE)
LPARAM lParam; // 32位的附加数据(LVIF_PARAM)
} LV_ITEM;
其中lParam成员可用来存储与项相关的数据,这在有些情况下是很有用的.state和stateMask的值如表6.28所示,stateMask用来说明要获取或设置哪些状态.
NM_LISTVIEW结构.该结构用于存储列表视图的通知消息的有关信息,大部分列表视图的通知消息都会附带指向该结构的指针.NM_LISTVIEW的定义为
typedef struct tagNM_LISTVIEW {
NMHDR hdr; //标准的NMHDR结构
int iItem; //表项的索引,若为-1则无效
int iSubItem; //子项的索引,若为0则无效
UINT uNewState; //项的新状态
UINT uOldState; //项原来的状态
UINT uChanged; /*取值与LV_ITEM的mask成员相同,用来表明哪些状态发生了变化*/
POINT ptAction; //事件发生时鼠标的客户区坐标
LPARAM lParam; //32位的附加数据
} NM_LISTVIEW;
LV_DISPINFO结构.该结构包含了与项的显示有关的信息,其定义为
typedef struct tagLV_DISPINFO {
NMHDR hdr;
LV_ITEM item;
} LV_DISPINFO;
LV_KEYDOWN结构.该结构包含一些与键盘有关的信息,其定义为
typedef struct tagLV_KEYDOWN {
NMHDR hdr;
WORD wVKey; //虚拟键盘码
UINT flags; //总为0
} LV_KEYDOWN;
CListCtrl类提供了大量的成员函数.在这里,我们结合实际应用来介绍一些常用的函数:
列的插入和删除.在以报告格式显示列表视图时,一般会显示一列表项和多列子项.在初始化列表视图时,先要调用InsertColumn插入各个列,该函数的声明为
int InsertColumn( int nCol, const LV_COLUMN* pColumn );
其中参数nCol是新列的索引,参数pColumn指向一个LV_COLUMN结构,函数根据该结构来创建新的列.若插入成功,函数返回新列的索引,否则返回-1.
要删除某列,应调用DeleteColumn函数,其声明为
BOOL DeleteColumn( int nCol );
表项的插入.要插入新的表项,应调用InsertItem.如果要显示图标,则应该先创建一个CImageList对象并使该对象包含用作显示图标的位图序列.然后调用SetImageList来为列表视图设置位图序列.函数的声明为
int InsertItem( const LV_ITEM* pItem );
参数pItem指向一个LV_ITEM结构,该结构提供了对表项的描述.若插入成功则函数返回新表项的索引,否则返回-1.
CImageList* SetImageList( CImageList* pImageList, int nImageList );